﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace Teenusekiht
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1 : IDisposable
    {
        [OperationContract] string GetData(int value);

        [OperationContract]
        bool LisaKohvik(string nimi, string piltAsukoht, string kirjeldus, string omanik, string rakenduseNimi);

        [OperationContract]
        bool MuudaKohvikuKirjeldus(int kohvikId, string kirjeldus, String rakenduseNimi);

        [OperationContract]
        bool TagastabMenuuMuutujad(int menyy_ID, int? kasutaja_ID, String rakenduseNimi); 

        [OperationContract]
        int KohvikuteArv(String rakenduseNimi);

        [OperationContract]
        string MuudaVoiLisaSoodustust(SoodustusType uuenenudAndmed, String rakenduseNimi);

        [OperationContract]
        string SaidiKasutajaLiik(int site_kasutaja_ID, String rakenduseNimi);

        [OperationContract]
        bool KustutaSaidiKasutaja(int site_kasutaja_ID, String rakenduseNimi);

        [OperationContract]
        SiteKasutaja[] AnnaKoikSaidiKasutajad(String rakenduseNimi);

        [OperationContract]
        int? LisaArtikkelMenuuse(int item_ID, int menyy_ID, String rakenduseNimi);

        [OperationContract]
        int? LisaKohvikuleMenuu(int kovhik_ID, int menyy_ID, String rakenduseNimi);

        [OperationContract]
        bool KustutaMenuuJaKohvikuSeos(int kovhik_ID, int menyy_ID, String rakenduseNimi);

        [OperationContract] int? LisaUusMenuu(int? kovhik_ID, string menyyNimi, String rakenduseNimi);

        [OperationContract] int[] AnnaMenyydMidaPoleKohvikul(int kohvikID, String rakenduseNimi);
       
        [OperationContract] bool MuudaKohvikuMenyyTodayOlek(int kohvikID, int menuID, String rakenduseNimi);
       
        [OperationContract] string[] KohvikuteNimed(String rakenduseNimi);
       
        [OperationContract] string KohvikuNimiIdJargi(int kohvikID, String rakenduseNimi);

        [OperationContract]
        int[] AnnaKoikOmanikuKohvikud(int Omaniku_ID, String rakenduseNimi);

        [OperationContract]
        SiteKasutaja[] AnnaKoikKohvikuKasutajad(int kohviku_ID, String rakenduseNimi);

        [OperationContract]
        bool MuudaSaidiKasutajaLiik(int site_kasutaja_ID, int liik, String rakenduseNimi);

        [OperationContract]
        SiteKasutaja[] KoikLubatudSaidiKasutajaTyybid(String rakenduseNimi);

        [OperationContract]
        KohvikuKasutajaRoll[] KoikLubatudKohvikuRollid(String rakenduseNimi);

        [OperationContract]
        KohvikuKasutajaRoll[] KasutajaKohvikuRollid(int kohviku_kasutaja_ID, String rakenduseNimi);

        [OperationContract]
        bool MuudaKohvikuKasutajaRoll(int site_kasutaja_ID, int kohviku_ID, int rollID, String rakenduseNimi);

        [OperationContract]
        int? SaidiKasutajaLiikID(int site_kasutaja_ID, String rakenduseNimi);

        [OperationContract]
        List<KohvikType> Kohvikud(String rakenduseNimi);

        [OperationContract]
        int? KohvikuKasutajaLiikID(int kohviku_kasutaja_ID, int kohviku_ID, String rakenduseNimi);

        [OperationContract]
        int[] MenuuKohvikuIdJargi(int kohviku_ID, bool isToday, String rakenduseNimi); // tagastab kõik menüü id-d mis on märgitud kohviku päevamenüüdeks

        [OperationContract]
        bool LisaMenuuArtikkelMenuuse(MenyyItem menyyItem, int? menyy_id, String rakenduseNimi); 

        [OperationContract]
        bool KustutaMenuuArtikkel(int[] menyyItemID, String rakenduseNimi);

        [OperationContract]
        SoodustusType[] AnnaSoodustused(int[] myygiArtiklid, String rakenduseNimi);

        [OperationContract]
        SoodustusType[] AnnaKohvikuSoodustused(int kohvikuID, String rakenduseNimi);

        [OperationContract]
        MenyyItem[] TagastaMenuuArtiklid(int meny_ID, String rakenduseNimi);

        [OperationContract]
        string VahetaMenuuArtiklit(MenyyItem menyyItem, String rakenduseNimi);

        [OperationContract]
        string MenuuNimetus(int menuID, String rakenduseNimi);

        [OperationContract]
        List<MyygiartikkelType> AnnaMuugiartiklidMidaMenuusPole(int[] olemasMyygiArtikliIDs, String rakenduseNimi);

        [OperationContract]
        string[] AnnaMenuuNimed(String rakenduseNimi);

        [OperationContract]
        List<KaupType> AnnaKaubad(String rakenduseNimi);

        [OperationContract]
        int? LisaKaup(string nimetus, String rakenduseNimi);

        [OperationContract] int KohvikuKommentaarideArv(int kId, String rakenduseNimi);
        [OperationContract] GenCom[] AnnaKohvikuKommentaarid(int kId, int rowC, int page, String rakenduseNimi);
        [OperationContract] RatCom[] AnnaKohvikuKommentaarideHinded(String rakenduseNimi);
        [OperationContract] GenCom LisaKohvikuKommentaar(EdiCom com, String rakenduseNimi);
        [OperationContract] GenCom MuudaKohvikuKommentaar(EdiCom com, String rakenduseNimi);
        [OperationContract] bool MuudaKohvikuKommentaariOlek(StaCom com, String rakenduseNimi);
        [OperationContract] bool MuudaKohvikuKommentaariPeidetus(StaCom com, String rakenduseNimi);

        [OperationContract]
        KohvikType AnnaKohvik(int kohvikID, String rakenduseNimi);

        [OperationContract]
        string AnnaKasutajaMeiliAadress(string userName, String rakenduseNimi);

        [OperationContract]
        string AnnaKasutajaIdJargi(int id, String rakenduseNimi);

        [OperationContract]
        int? AuthendiKasutaja(string uNa, string uPa, String rakenduseNimi);

        [OperationContract]
        string RegistreeriKasutaja(string userName, string pass, int liikID, String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaRakendusteKohtaTana(String rakenduseNimi);

        [OperationContract] 
        Dictionary<string, long> StatistikaRakendusteKohtaViimaneNadal(String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaRakendusteKohtaSellelKuul(String rakenduseNimi); 

        [OperationContract]
        Dictionary<string, long> StatistikaRakendusteKohtaKokku(String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaMeetoditeKohtaTana(String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaMeetoditeKohtaViimaneNadal(String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaMeetoditeKohtaSellelKuul(String rakenduseNimi);

        [OperationContract]
        Dictionary<string, long> StatistikaMeetoditeKohtaKokku(String rakenduseNimi);

        [OperationContract]
        string[] KohvikuLahtiolekuAeg(int kohvikuID, string p2ev, string rakenduseNimi); 

        [OperationContract]
        AadressType AnnaKohvikuAadress(int kohvikuID, string rakenduseNimi);

        

        // TODO: Add your service operations here
    }



    [DataContract]
    public class KohvikuKasutajaRoll {
        int kohvik_ID;
        [DataMember]
        public int Kohvik_ID
        {
            get { return kohvik_ID; }
            set { kohvik_ID = value; }
        }

        int roll_ID;
        [DataMember]
        public int Roll_ID
        {
            get { return roll_ID; }
            set { roll_ID = value; }
        }

        string roll_Nimetus;

        [DataMember]
        public string Roll_Nimetus
        {
            get { return roll_Nimetus; }
            set { roll_Nimetus = value; }
        }
    }

    [DataContract]
    public class MenuForXML 
    {
        [DataMember]
        public string Nimi { get; set; }

        [DataMember]
        public List<MenyyItem> MyygiArtiklid { get; set; }

    }

    [DataContract]
    public class SiteKasutaja 
    {
        KohvikuKasutajaRoll[] kohvikuKasutajaRollid;

        [DataMember]
        public KohvikuKasutajaRoll[] KohvikuKasutajaRollid
        {
            get { return kohvikuKasutajaRollid; }
            set { kohvikuKasutajaRollid = value; }
        }
        private int kasutaja_ID;

        [DataMember]
        public int Kasutaja_ID
        {
            get { return kasutaja_ID; }
            set { kasutaja_ID = value; }
        }

        private string nimi;

        [DataMember]
        public string Nimi
        {
            get { return nimi; }
            set { nimi = value; }
        }

        private int? kasutaja_liik_ID;

        [DataMember]
        public int? Kasutaja_liik_ID
        {
            get { return kasutaja_liik_ID; }
            set { kasutaja_liik_ID = value; }
        }

        private string kasutaja_Liik_Nimi;

        [DataMember]
        public string Kasutaja_Liik_Nimi
        {
            get { return kasutaja_Liik_Nimi; }
            set { kasutaja_Liik_Nimi = value; }
        }
    }


    [DataContract]
    public class MenyyItem {

        string myygiartikliNimi;
        int hind; // eurosentides
        int id;
        int kaup_ID;
        string kommentaar;

        [DataMember]
        public string Kommentaar
        {
            get { return kommentaar; }
            set { kommentaar = value; }
        }

        [DataMember]
        public int Kaup_ID
        {
            get { return kaup_ID; }
            set { kaup_ID = value; }
        }

        [DataMember]
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        public string MyygiartikliNimi
        {
            get { return myygiartikliNimi; }
            set { myygiartikliNimi = value; }
        }
       
        [DataMember]
        public int Hind
        {
            get { return hind; }
            set { hind = value; }
        }

    }

    [DataContract]
    public class KohvikuMenyyType
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public int Kohvik_ID { get; set; }
        [DataMember]
        public int MenuID { get; set; }
        [DataMember]
        public bool TodaysMenu { get; set; }
        [DataMember]
        public string Kommentaar { get; set; }
    }

    [DataContract]
    public class SoodustusType
    {
        [DataMember]
        public string SoodustuseNimi { get; set; }
        [DataMember]
        public int? Soodustus_ID { get; set; }
        [DataMember]
        public int? MyygiArtikkel_ID { get; set; }
        [DataMember]
        public float? Kordaja { get; set; }
        [DataMember]
        public float? Hind { get; set; }
        [DataMember]
        public string Kommentaar { get; set; }
    }

    [DataContract]
    public class KohvikType 
    {
        [DataMember]
        public string KohvikuNimi { get; set; }
        [DataMember]
        public int Kohviku_ID { get; set; }
        [DataMember]
        public string Pilt { get; set; }
        [DataMember]
        public string Kirjeldus { get; set; }
        [DataMember]
        public bool Kinnitatud { get; set; }
    }

    [DataContract]
    public class AadressType
    {
        [DataMember]
        public int Aadress_ID { get; set; }

        [DataMember]
        public int Kohvik_ID { get; set; }

        [DataMember]
        public string Linn { get; set; }

        [DataMember]
        public string Tanav { get; set; }

        [DataMember]
        public string Maja { get; set; }

        [DataMember]
        public string Indeks { get; set; }
    }

    [DataContract] public class GenCom
    {
        [DataMember] public int? cId {get;set;}
        [DataMember] public int? cUId {get;set;}
        [DataMember] public string uName {get;set;}
        [DataMember] public string dText {get;set;}
        [DataMember] public DateTime? cDate {get;set;}
        [DataMember] public DateTime? mDate {get;set;}
        [DataMember] public DateTime? dDate {get;set;}
        [DataMember] public ushort dValue {get;set;}
        [DataMember] public bool dHidden {get;set;}
        [DataMember] public byte cState {get;set;}
    }

    [DataContract] public class RatCom
    {
        [DataMember] public byte rVal {get;set;}
        [DataMember] public string rDes {get;set;}
    }

    [DataContract] public class EdiCom
    {
        [DataMember] public int? cId {get;set;}
        [DataMember] public int? cUId {get;set;}
        [DataMember] public string uName {get;set;}
        [DataMember] public string dText {get;set;}
        [DataMember] public ushort dValue {get;set;}
        [DataMember] public int kId {get;set;}
    }

    [DataContract] public class StaCom
    {
        [DataMember] public int? cId {get;set;}
        //[DataMember] public int? cUId {get;set;}
        [DataMember] public byte cState {get;set;}
    }

    [DataContract]
    public class KaupType
    {
        [DataMember]
        public int KaupID { get; set; }
        [DataMember]
        public string Nimetus { get; set; }
    }

    [DataContract]
    public class MyygiartikkelType
    {
        [DataMember]
        public int MyygiArtikkelID { get; set; }
        [DataMember]
        public string Nimetus { get; set; }
    }

}
